3.10 Bedienungsfreundliche Ergänzungen im Kernprogramm

Um die Bedienung des in den letzten Abschnitten erstellten Projekts einfacher zu handhaben und das Projekt noch attraktiver zu gestalten, werden zwei Ergänzungen zum Kernprogramm vorgenommen. Zum einen soll das Projekt mit der Ablauf-Taste gestartet werden und zum anderen soll gezeigt werden, wie Animationselemente von der Kernprogrammerweiterung aus direkt gesteuert werden können.
Die dazu verwendeten Methoden wurden bereits im Abschnitt 3.1.5 im Zusammenhang mit der Kernprogramm-Erweiterung kurz beschrieben und an entsprechenden Projekten vorgestellt.

Wir gehen davon aus, das Sie das Kernprogramm wie im Kapitel 3.8.1.3 beschrieben selbst erstellt haben. Dadurch ist die Auflistung des Kernprogramm kürzer, da VisEdit vielen automatischen Kommentar im Kernprogramm erzeugt.
feder4ebenen.prj verwendet ein selbst erstelltes kurzes Kernprogramm.
Ihr Kernprogramm sollte in etwa so aussehen :

t:=0; y:=0.1; v:=0; // Anfangswerte für t,y und v m:=1; D:=Schieber(D); // Masse m und Federkonstante D dt:=0.05;tEnde:=10; // Zeitintervall dt und Ablaufzeit tEnde REPEAT // Schleifenbeginn F:=-D*y; // Berechnung von F,a,v und y a:=F/m; y:=y+v*dt; v:=v+a*dt; t:=t+dt; // Erhöhung von t um dt ausgabe(t,y,v,a); // Ausgabeanweisung für die Variablen t,y,v und a UNTIL t>tEnde; // Abbruchbedingung der Schleife

3.10.1 Ergänzungen im Kernprogramm

Nach dem bisherigen Vorgehen ist das Projekt der Federschwingung bereits voll einsatzfähig, jedoch lässt sich eine noch aussagekräftigere Darstellung durch Änderungen am Kernprogramm erreichen, die recht einfach zu realisieren sind, da sie immer die gleiche formale Struktur aufweisen.

Startwerte Abb.107
Abb 3.107 Anfangswerte in Startwerteliste übernehmen


Ziel hierbei ist es dem Anwender zu ermöglichen, die Startwerte auch im Sofortstartmodus bequem über die Startwertliste zu verändern.
Der erste Schritt besteht also darin, die konstanten Anfangswerte in die PAKMA-Startwerte zu übernehmen (siehe
Abschnitt 3.1.4), um diese auch im Sofortstartmodus variieren zu können. Tragen Sie dazu die Startwerte in die Startwertliste (F6) ein und ersetzen Sie die erste Zeile im Kernprogramm
t:=0; y:=0.1; v:=0;      
m:=1; dt:=0.05;tEnde:=10;	
durch den Befehl
Startwerte; 
Ablauftaste

Danach sollten Sie die Möglichkeit der komfortableren Bedienung eines Projektes über die Buttonleiste im PAKMA-Ausgabefenster ausnutzen und die Ablauf-Taste verwenden. Ziel ist hierbei, die Schieber im Vorlauf einzustellen und so die Ausgangssituation kontextnah darzustellen.
Dazu wollen wir das unser Beispiel noch um einen Schieber zum Einstellen der Anfangsauslenkung erweitern. Hierzu müssen Sie den Zustand der Ablauf-Taste ins Kernprogramm mit einbeziehen. Diese wird intern über die Bezeichnung ablauf_an abgefragt über die Entscheidung, ob ablauf_an = 0 oder = 1 ist. Dabei ist die Ablauf-Taste als Schalter definiert, der entweder „an“, d.h. die Ablauf-Taste ist aktiviert (Status: ablauf_an=1), oder „aus“, d.h. inaktive Ablauf-Taste (Status: ablauf_an=0), sein kann. Somit könnte Ihre erste „Optimierung“ des Kernprogramms folgendermaßen aussehen (die geänderten Zeilen sind farblich gekennzeichnet):

Startwerte; D:=Schieber (D); y:=Schieber (y); // neuer Schieber zum Einstellen der Anfangsauslenkung dt_:=dt; // sichern des in der Startwerttabelle definierten Zeitschritt REPEAT F:=-D*y; a:=F/m; y:=y+v*dt; v:=v+a*dt; if Ablauf_an=0 then // falls die Ablauftaste noch nicht gedrückt wurde begin D:=Schieber (D); // werden D und y die Werte der entsprechenden y:=Schieber (y); // Schieber zugewiesen; dt:=0; // die Ablaufzeit schreitet dann noch nicht voran end; if Ablauf_an=1 then //falls die Ablauftaste gedrückt wurde dann begin // wird der Zeitschritt wieder gesetzt dt:=dt_ // und das Projekt startet t:=t+dt; end; ausgabe (t, y, v, a); UNTIL t>tEnde; ;

feder_ablauftaste.prj

Mit Hilfe dieser kleinen Erweiterung ist die Bedienung schon wesentlich angenehmer, da auch im Sofortstartmodus zunächst das statische Bild der Simulation, das den gewählten Startwerten entspricht, mit den Schülern betrachtet werden kann und die Schüler Vorhersagen zum Ablauf der nun folgenden Simulation machen können. Anschließend kann durch Anklicken der Ablauf-Taste die Animation gestartet werden.

Kernprogrammerweiterung verwenden

Allerdings ist das Kernprogramm jetzt etwas unübersichtlich geworden. Daher bietet es sich hier an, den zusätzlichen Quelltext in die Kernprogrammerweiterung und nicht direkt in das Kernprogramm zu schreiben. Dabei ist zu beachten, dass die Anweisungen D:=Schieber(D); y:=Schieber (y); dt_:=dt; in den Initialisierungsteil der Kernprogrammerweiterung einzutragen sind, da sie vor der Repeat-Until-Schleife stehen. Die restlichen zusätzlichen Anweisungen werden in den Ausgabeteil der Kernprogrammerweiterung übernommen.

  • Kernprogramm

    Startwerte; REPEAT F:=-D*y; a:=F/m; y:=y+v*dt; v:=v+a*dt; ausgabe (t, y, v, a); UNTIL t>tEnde;

  • Kernprogrammerweiterung

    Initialisierung : D:=Schieber (D); y:=Schieber (y); dt_:=dt; Ausgabe: if Ablauf_an=0 then begin D:=Schieber (D); y:=Schieber (y); dt:=0; end; if Ablauf_an=1 then begin dt:=dt_ t:=t+dt; end;

feder_ablauftaste2.prj



Schieber ausblenden

Die Einstellung der Federkonstante über den Schieber ist während des Ablaufs des Projekts nicht mehr sinnvoll und die Darstellung des Schiebers lenkt als unnötiges Bildschirmelement vom wesentlichen ab.
Daher soll der Schieber während des Projektsablaufs versteckt sein. Zudem sollen mehrere Projektdurchläufe möglich sein, ohne jedes mal das Projekt mit völlig neu aktivieren zu müssen.
Mit dem Befehl element_sichtbar wird festgelegt, ob ein Element im Ausgabefenster dargestellt wird (1) oder nicht (0). Nach der Erklärung dieses einfachen Befehls ergänzen wir den Ausgabeteil der Kernprogrammerweiterung entsprechend :
  • Kernprogramm

  • Kernprogrammerweiterung

    Ausgabe:

    if Ablauf_an=0 then begin D:=Schieber (D); y:=Schieber (y); dt:=0; end; if Ablauf_an=1 then begin dt:=dt_ t:=t+dt; // Schieber unsichtbar während des Ablaufs Element_Sichtbar ('Schieber_d',0); Element_Sichtbar ('Schieber_y',0); end;

feder_schieber

Abb.108
Abb 3.108 Projekt feder_oft.prj nach 2 Durchläufen
mehrere Durchläufe

Ziel hierbei ist es mehrere Durchläufe vergleichen zu können. Nun sollen mehrere Durchläufe hintereinander möglich sein, damit das Projekts nicht nach jedem Ablauf völlig neu mit aktiviert werden muss. Wir wollen erreichen, das nach dem Ablauf neue Werte für die Federkonstante D und die Anfangsauslenkung mit den Schiebern eingestellt werden können. und die Simulation durch erneutes Klicken der Ablauftaste gestartet werden kann.
Dazu benötigen wir die beiden Befehle ablauf_ruecksetzen und neu_graf. Durch den Befehl ablauf_ruecksetzen wird die Ablauftaste wieder deaktiviert und ablauf_an auf Null gesetzt. Mit dem Befehl neu_graf werden alle Grafen neu gezeichnet.
Bis jetzt ist unsere Abbruchbedingung an das vorgegebene Ende der Durchlaufzeit tEnde gekoppelt. Da wir nun beliebig viele Durchläufe ermöglichen wollen, müssen wir eine Endlosschleife erzeugen.
Dennoch soll nach Ablauf von tEnde der Durchlauf beendet sein und das Projekt in den Ausgangszustand zurückgesetzt werden, d.h. die Zeit muss zurück auf Null gesetzt werden, die alten Startwerte wieder übernommen und die Ablauftaste wieder deaktiviert werden. Dies wird durch Abfrage einer if.. then.. - Bedingung ermöglicht.
Damit der Schieber für die Federkonstante nach dem Durchlauf wieder eingestellt werden kann, muss er wieder sichtbar gemacht werden, wenn die Ablauftaste deaktiviert ist.
Das Kernprogramm muss also auf folgende Weise geändert werden :
  • Kernprogramm

    Startwerte; REPEAT F:=-D*y; a:=F/m; y:=y+v*dt; v:=v+a*dt; ausgabe (t, y, v, a); UNTIL 0>1 //Endlosschleife erzeugen

  • Kernprogrammerweiterung

    Initialisierung : D:=Schieber (D); y:=Schieber (y); dt_:=dt; Ausgabe: if Ablauf_an=0 then begin Element_Sichtbar ('Schieber_d',1); Element_Sichtbar ('Schieber_y',1); // Schieber nach dem Ablauf // wieder sichtbar machen D:=Schieber (D); y:=Schieber (y); dt:=0; end; if Ablauf_an=1 then begin dt:=dt_ t:=t+dt; Element_Sichtbar ('Schieber_d',0); Element_Sichtbar ('Schieber_y',0); end; if t>tEnde then begin t:=0; Startwerte; ablauf_ruecksetzen; neu_graf; end;

  • feder_oft.prj

    Grafen löschen

    Bisher werden die Graphen der vorherigen Durchläufe mit in das Graphenfenster eingezeichnet. Das kann erwünscht sein, um auf diese Art die Graphen mehrer Durchläufe bei verschiedenen Werte von D zu vergleichen (siehe Abb.3.108)
    Nach einigen Durchgängen wird das Grafenfenster wegen der vielen gleichzeitig dargestellten Grafen sehr unübersichtlich. Daher wollen wir nun die Grafen vor jedem Projektstart löschen. Der Befehl hierfür lautet grafen_loeschen
    Es muss nur eine einzige Befehlszeile in den Ausgabeteil der Kernprogramm-Erweiterung eingefügt werden :
    • Kernprogramm

  • Kernprogrammerweiterung

    Ausgabe : ... if Ablauf_an=1 then begin if t=0 then grafen_loeschen; ... end; ...

  • feder_loesch.prj

    Oft ist es sinnvoll genau zwei Abläufe miteinander zu vergleichen. Durch die folgenden Änderungen in der Kernprogramm-Erweiterung wird der Graf nach jedem zweiten Durchlauf gelöscht.
    • Kernprogramm

  • Kernprogrammerweiterung

    Initialisierung : ... z:=0; ... Ausgabe: ... if Ablauf_an=1 then begin if (t=0) and (z=0) then grafen_loeschen; ... end; if t>tEnde then begin z:=z+1; if z=2 then z:=0; ... end;

  • feder_loesch2.prj



    weiter mit...

    Steuerung der Animationselemente